home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / jovept1.arc / DRAW.C < prev    next >
Text File  |  1985-05-30  |  4KB  |  237 lines

  1. /* draw.c */
  2.  
  3. /* JOVE/MSDOS. K. Mitchum 1/85 */
  4. /* Modifications for personal use only. */
  5. /* original code J. Payne LSRHS 5/83 */
  6. /* Ken Mitchum */
  7. /* University of Pittsburgh */
  8. /* Decision Systems Laboratory */
  9.  
  10.  
  11. /*
  12.    Jonathan Payne at Lincoln-Sudbury Regional High School 4-19-83
  13.   
  14.    jove_draw.c
  15.  
  16.    This contains, among other things, the modeline formatting, and the
  17.    message routines (for prompting).  */
  18.  
  19. #include "jove.h"
  20. #include "term.h"
  21. #include "screen.h"
  22.  
  23.  
  24. extern int errormsg;    /* main.c */
  25.  
  26.  
  27. #define strcop(lp,str)        for (--lp, pp = str; (*lp++ = *pp++); )
  28.  
  29. char *
  30. bufmod(bp)
  31. BUFFER    *bp;
  32. {
  33.     if (IsModified(bp))
  34.         return "* ";
  35.     return "";
  36. }
  37.  
  38. /*
  39.  * Find_pos returns the position on the line, that c_char represents
  40.  * in line.
  41.  */
  42.  
  43. find_pos(line, c_char)
  44. LINE    *line;
  45. {
  46.     register char    *lp;
  47.     char    buf[LBSIZE];
  48.  
  49.     if (line == curline)
  50.         lp = linebuf;
  51.     else
  52.         lp = getcptr(line, buf);
  53.     return calc_pos(lp, c_char);
  54. }
  55.  
  56. calc_pos(lp, c_char)
  57. register char    *lp;
  58. register int    c_char;
  59. {
  60.     register int    pos = 0;
  61.     register char    c;
  62.  
  63.     while ((--c_char >= 0) && (c = *lp++)) {
  64.         if (c == '\t')
  65.             pos += (tabstop - (pos % tabstop));
  66.         else if (c == '\177' || c < ' ')
  67.             pos += 2;
  68.         else
  69.             pos++;
  70.      }
  71.     return pos;
  72. }
  73.  
  74. /*
  75.  * message prints the null terminated string onto the bottom line of the
  76.  * terminal.
  77.  */
  78.  
  79. message(str)
  80. char    *str;
  81. {
  82.     if (Input)
  83.         return;
  84.     UpdMesg++;
  85.     errormsg = 0;
  86.     if (str != mesgbuf)
  87.         strncpy(mesgbuf, str, sizeof mesgbuf);
  88. }
  89.  
  90. /*
  91.  * This prints all the information about the current mode, and the
  92.  * current filename.
  93.  */
  94.  
  95.  
  96.  
  97. ModeLine(w)
  98. WINDOW    *w;
  99. {
  100.     int    lineno = FLine(w) + SIZE(w),
  101.         i;
  102.     char    line[132];
  103.     int    *flags = w->w_bufp->b_flags;
  104.  
  105.     register char    *lp = line + 1,        /* Pay attention to this! */
  106.             *pp;
  107.     static char    *modenames[] = {
  108.         "TE-",
  109.         "OV-",
  110.         "C-",
  111.         "MA-",
  112.         "CIS-",
  113.         "SM-",
  114.         "AI-"
  115.     };
  116.  
  117.     i_set(lineno, 0);
  118.  
  119.     if (w->w_next != fwind)
  120.         strcop(lp, "--- ");
  121.     else
  122.         strcop(lp, "    ");
  123.  
  124.     strcop(lp, "JOVE (");
  125.  
  126.     for (i = 0; i < NFLAGS; i++, flags++) {
  127.         if (*flags == 0)
  128.             continue;
  129.         strcop(lp, modenames[i]);
  130.     }
  131.     if (*(lp - 2) == '(')
  132.         strcop(lp, "NORMAL)   ");
  133.     else {
  134.         lp--;    /* Back over the '-' */
  135.         strcop(lp, ")   ");
  136.     }
  137.     strcop(lp, sprint("Buffer: %s ", w->w_bufp->b_name));
  138.     pp = w->w_bufp->b_fname ? sprint("  \"%s\" ", w->w_bufp->b_fname) : "  [No file] ";
  139.     strcop(lp, pp);
  140.     if (IsModified(w->w_bufp))
  141.         strcop(lp, "* ");
  142.     --lp;    /* strcop leaves lp after the null */
  143.     if (w->w_next != fwind)
  144.         while (lp < &line[CO - 2])
  145.             *lp++ = '-';
  146.     *lp = 0;
  147.     if (swrite(line,1))
  148.         do_cl_eol(lineno);
  149. }
  150.  
  151. RedrawDisplay()
  152. {
  153.     LINE    *newtop = prev_line(curwind->w_line, exp_p ?
  154.                 exp : HALF(curwind));
  155.  
  156.     if (newtop == curwind->w_top)
  157.         v_clear(FLine(curwind), FLine(curwind) + SIZE(curwind));
  158.     else
  159.         SetTop(curwind, newtop);
  160. }
  161.  
  162. v_clear(line1, line2)
  163. register int    line1,
  164.         line2;
  165. {
  166.     while (line1 <= line2) {
  167.         i_set(line1, 0);
  168.         cl_eol();
  169.         oimage[line1].Line = nimage[line1].Line = 0;
  170.         line1++;
  171.     }
  172. }
  173.  
  174. ClAndRedraw()
  175. {
  176.     cl_scr();
  177. }
  178.  
  179. /*
  180. NextPage()
  181. {
  182.     LINE    *newline;
  183.  
  184.     if (exp_p)
  185.         UpScroll();
  186.     else {
  187.         newline = next_line(curwind->w_top, max(1, SIZE(curwind) 
  188.         +HALF(curwind) - 3));
  189.         DotTo(newline, 0);
  190.         if (in_window(curwind, curwind->w_bufp->b_dol) == -1)
  191.             SetTop(curwind, newline);
  192.         curwind->w_line = newline;
  193.     RedrawDisplay();
  194.     }
  195. }
  196. */
  197.  
  198. NextPage()
  199. {
  200.     LINE    *newline;
  201.  
  202.     if (exp_p)
  203.         UpScroll();
  204.     else {
  205.         newline = next_line(curwind->w_top, max(1, SIZE(curwind) 
  206.         +HALF(curwind) - 3));
  207.         DotTo(newline, 0);
  208.         SetTop(curwind, newline);
  209.         curwind->w_line = newline;
  210.     RedrawDisplay();
  211.     }
  212. }
  213.  
  214. PrevPage()
  215. {
  216.     LINE    *newline;
  217.  
  218.     if (exp_p)
  219.         DownScroll();
  220.     else {
  221.         newline = prev_line(curwind->w_top, max(1, HALF(curwind) - 3));
  222.         DotTo(newline, 0);
  223.         SetTop(curwind, curline);
  224.         curwind->w_line = curwind->w_top;
  225.     RedrawDisplay();
  226.     }
  227. }
  228.  
  229.  
  230. rbell()
  231. {
  232.     RingBell++;
  233. }
  234.  
  235. /*--------------------------o.s. dependent-----------------------*/
  236. /* end */
  237.